package com.air;

public class ClassL {

    public static void main(String[] args) throws ClassNotFoundException {
        //new java.lang.ClassLoader();
        ClassLoader classLoader = ClassL.class.getClassLoader();
        classLoader.loadClass("");

/*

 // 委托的父类加载器 注意：VM 硬编码该字段的偏移量，因此必须在其后添加所有新字段。
    private final ClassLoader parent;

 protected Class<?> loadClass (String name,boolean resolve) throws ClassNotFoundException
        {
            synchronized (getClassLoadingLock(name)) {
                // 首先，检查类是否已经加载
                Class<?> c = findLoadedClass(name);
                if (c == null) {
                //还没加载
                    long t0 = System.nanoTime(); //返回正在运行的Java虚拟机的高分辨率时间源的当前值，以纳秒为单位。
                    try {
                        if (parent != null) {
                            c = parent.loadClass(name, false); //使用父类加载
                        } else {
                            c = findBootstrapClassOrNull(name); //
                        }
                    } catch (ClassNotFoundException e) {
                        // 如果从非空父类加载器中找不到类，则抛出 ClassNotFoundException
                    }

                    if (c == null) {
                        // 如果仍未找到，则调用 findClass 以查找该类。
                        long t1 = System.nanoTime();
                        c = findClass(name);

                        //protected Class<?> findClass(String name) throws ClassNotFoundException {
                        //        throw new ClassNotFoundException(name);
                        //    }


                        //这是定义类加载器；记录统计
                        sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                        sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                        sun.misc.PerfCounter.getFindClasses().increment();
                    }
                }
                if (resolve) {
                //假设已经链接了类A时，可使用resolveClass()方法链接指定的类，那么在这种情况下，此方法只是返回。
                    resolveClass(c);
                }
                return c;
            }
        }*/
    }


}
